package com.cjq.dao;

import com.cjq.bean.Express;
import com.cjq.exception.CodeException;

import java.util.List;
import java.util.Map;

public interface BaseExpressDao {


    /**
     * 用于查询数据库中的全部快递（总数+新增），待取件快递（总数+新增）
      * @return [{size:总数，day:新增},{size:总数,day:新增}]    返回一个Map类型的List集合
     */
    List<Map<String,Integer>> console();


    /**
     *  用户查询所有快递
     * @param limit     是否分页的标记  默认是true 表示分页   false表示查询所有
     * @param offset     起始条数 起始索引
     * @param pageNumber    每页查询的条数
     * @return      快递的集合
     */
    List<Express> findAll(boolean limit,int offset,int pageNumber);


    /**
     * 根据快递单号，查询快递信息
     * @param number   单号
     * @return  查询快递信息，单号不存在时返回null
     */
    Express findByNumber(String number);



    /**
     * 根据快递单号，查询快递信息
     * @param  code  取件码
     * @return  查询快递信息，取件码不存在时返回null
     */
    Express findByCode(String code);


    /**
     * 根据用户手机号码，查询快递信息 一个用户可以有多个快递
     * @param  userPhone  用户手机号码
     * @return  查询快递信息，电话号码不存在时返回null
     */
   List<Express>  findByUserPhone(String userPhone);


    /**
     * 根据录入人手机号码，查询录入人所录入的所有记录
     * @param sysPhone  录入人的到手机号码
     * @return
     */
    List<Express> findBySysPhone(String sysPhone);


    /**
     * 快递的录入
     * @param s     录入的快递对象
     * @return      返回boolean类型，true表示成功
     */
    boolean insert(Express s) throws CodeException;


    /**
     * 快递的修改
     * @param id
     * @param newExpress  新的快递对象包括（number,company,userName,status）
     * @return
     */
    boolean update(int id,Express newExpress);


    //根据id（快递id），删除单个快递信息
    boolean delete(int id);


    //更改快递的状态为1，表示取件完成   传递的是要修改的快递取件码
    boolean updateStatus(String code);

    public  List<Express> findBySysPhoneAndStatus(String sysPhone);



}
